/* ***************************************************** */
/* Arcans Team (2010), website                           */
/* Site under GNU GPL v3 Licence                         */
/* (see NOTICE and COPYING in the of the site file tree) */
/* ***************************************************** */

/* ***************************************************** */
/* fonction initSession, obligatoire                     */
/* ***************************************************** */
function initSession () { }
/* ***************************************************** */
/* module de connexion                                   */
/* ***************************************************** */
var connex = (function () {
	function go_con () {
		var alert_con = doc.byID("alert_con"); voile.modElt(alert_con,{"texte":"","class":"bad"});
		var pseudo = doc.byID("name_con").value; var passwd = doc.byID("pwd_con").value;
		if (pseudo == "") voile.modElt(alert_con,{"texte":"Pseudonyme invalide !"});
		else {
			if (passwd == "") voile.modElt(alert_con,{"texte":"Mot de passe invalide !"});
			else {
				doc.byID("name_con").disabled=true; doc.byID("pwd_con").disabled=true; doc.byID("connexb").disabled=true;
				voile.modElt(doc.byID("closeb"),{"onclick":"base.abortFun();"});
				voile.addElt("progress","",alert_con); ajaxFun("connex",new Array(hashFun(pseudo+passwd)),con_res);
			}
		}
	}
	function abort () {
		var alert_con = doc.byID("alert_con"); voile.suppElt(alert_v.firstChild);
		voile.modElt(alert_con,{"class":"error","texte":"Vous avez annulé la tentative de connexion."});
		doc.byID("name_con").disabled = false; doc.byID("pwd_con").disabled = false; doc.byID("connexb").disabled = false;
		voile.modElt(doc.byID("closeb"),{"onclick":"voile.initSclose(2,doc.'encart_connex','');"}); ajax.abort();
	}
	function con_res (resultat) {
		var alert_con = doc.byID("alert_con"); voile.suppElt(alert_con.firstChild);
		voile.modElt(doc.byID("closeb"),{"onclick":"voile.initSclose(2,'encart_connex','');"});
		if (resultat == null) {
			doc.byID("name_con").disabled = false; doc.byID("pwd_con").disabled = false; doc.byID("connexb").disabled = false;
			voile.modElt(alert_con,{"class":"error","texte":"Erreur serveur."});
		}
		else if (resultat.byTAG("ajax")[0].getAttribute("valid") == 0) {
			doc.byID("name_con").disabled = false; doc.byID("pwd_con").disabled = false; doc.byID("connexb").disabled = false;
			voile.modElt(alert_con,{"class":"bad","texte":"Identifiants erronés !"});
		}
		else if (resultat.byTAG("ajax")[0].getAttribute("valid") == 1) {
			var texte = "Connexion réussie. Bienvenue "+ resultat.byTAG("ajax")[0].getAttribute("user")+".";
			voile.modElt(alert_con,{"class":"good","texte":texte}); voile.suppElt(doc.byID("connexb")); voile.suppElt(doc.byID("closeb"));
			texte = "La page va se recharger automatiquement."; voile.addElt("span",{"class":"good","texte":texte},doc.byID("divbts_con"));
			window.setTimeout("voile.initSclose(2,'encart_connex','');",1800);
			window.setTimeout("location.replace('"+absolute_path+"index');",2700);
		}
		else if (resultat.byTAG("ajax")[0].getAttribute("valid") == "arch") {
			var texte = "Votre compte a été désactivé. Veuillez prendre contact avec un administrateur si vous désirez le réactivé.";
			voile.modElt(alert_con,{"texte":texte}); voile.suppElt(doc.byID("divbts_con"));
			window.setTimeout("voile.initSclose(2,'encart_connex','');",2500);
		}
		else {
			doc.byID("name_con").disabled = false; doc.byID("pwd_con").disabled = false; doc.byID("connexb").disabled = false;
			voile.modElt(doc.byID("closeb"),{"onclick":"voile.initSclose(2,'encart_connex','');"});
			voile.modElt(alert_con,{"class":"error","texte":"Échec de la tentative de connexion."});
		}
	}
	return { init: function () { voile.initSaff(1,"encart_connex"); }, go_con: function () { go_con(); }, abort: function () { abort(); } }
})();
//*********************************************************
//gestion du hashage **************************************
//extension de la fonction toHexStr de la classe Number
Number.prototype.toHexStr=function(){ var s="",v;for(var i=7;i>=0;i--){ v=(this>>>(i*4))& 0xf;s+=v.toString(16); } return s; }
//fonctions nécessaires pour le hashage
function ROTR(n,x) { return (x>>>n)|(x<<(32-n)); }
function Sigma0(x) { return ROTR(2,x)^ROTR(13,x)^ROTR(22,x); }
function Sigma1(x) { return ROTR(6,x)^ROTR(11,x)^ROTR(25,x); }
function sigma0(x) { return ROTR(7,x)^ROTR(18,x)^(x>>>3); }
function sigma1(x) { return ROTR(17,x)^ROTR(19,x)^(x>>>10); }
function Ch(x,y,z)  { return (x&y)^(~x&z); }
function Maj(x,y,z) { return (x&y)^(x&z)^(y&z); }
//fonction de hashage
var hashFun = function (chaine) {
	var K=[0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,
		0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,0xe49b69c1,
		0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,0x983e5152,0xa831c66d,
		0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,0x27b70a85,0x2e1b2138,0x4d2c6dfc,
		0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,
		0xd192e819,0xd6990624,0xf40e3585,0x106aa070,0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,
		0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,
		0xbef9a3f7,0xc67178f2];
	var H = [0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19];
	chaine += String.fromCharCode(0x80);
	var l = chaine.length/4 + 2;
	var N = Math.ceil(l/16);
	var M = new Array(N);
	for (var i=0; i<N; i++) {
		M[i] = new Array(16);
		for(var j=0;j<16;j++) M[i][j]=(chaine.charCodeAt(i*64+j*4)<<24)|(chaine.charCodeAt(i*64+j*4+1)<<16)|
			(chaine.charCodeAt(i*64+j*4+2)<<8)|(chaine.charCodeAt(i*64+j*4+3));
	}
	M[N-1][14]=((chaine.length-1)*8)/Math.pow(2,32);
	M[N-1][14]=Math.floor(M[N-1][14]);
	M[N-1][15]=((chaine.length-1)*8)& 0xffffffff;
	var W = new Array(64);
	var a,b,c,d,e,f,g,h;
	for(var i=0;i<N;i++){
		for(var t=0;t<16;t++)W[t]=M[i][t];
		for(var t=16;t<64;t++)W[t]=(sigma1(W[t-2])+W[t-7]+sigma0(W[t-15])+W[t-16])& 0xffffffff;
		a=H[0];b=H[1];c=H[2];d=H[3];e=H[4];f=H[5];g=H[6];h=H[7];
		for(var t=0;t<64;t++){
			var T1=h+Sigma1(e)+Ch(e,f,g)+K[t]+W[t];
			var T2=Sigma0(a)+Maj(a,b,c);
			h=g;g=f;f=e;e=(d+T1)& 0xffffffff;d=c;c=b;b=a;a=(T1+T2)& 0xffffffff;
		}
		H[0]=(H[0]+a)& 0xffffffff;H[1]=(H[1]+b)& 0xffffffff;H[2]=(H[2]+c)& 0xffffffff;H[3]=(H[3]+d)& 0xffffffff;
		H[4]=(H[4]+e)& 0xffffffff;H[5]=(H[5]+f)& 0xffffffff;H[6]=(H[6]+g)& 0xffffffff;H[7]=(H[7]+h)& 0xffffffff;
	}
	return H[0].toHexStr()+H[1].toHexStr()+H[2].toHexStr()+H[3].toHexStr()+
		H[4].toHexStr()+H[5].toHexStr()+H[6].toHexStr()+H[7].toHexStr();
}